﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Menu;
using System.Windows.Forms;

namespace UricaoWeb.Presentacion
{
    public partial class API_menu_BuscarPlato : API_Seguridad_Principal
    {
        public static List<Plato> listaPlatos = null; //lista de platos de todo el sistema
        public static List<Plato> listaBusquedaPlatos = new List<Plato>(); // lista de platos arrojados por el buscador
        public static string nombrePlatoComparacion = ""; // para pasar a minuscula la palabra a buscar y comparar
        public static Plato platoModificar = new Plato(); // usado para enviar un plato a modificar plato

        ///<sumary>
        ///Metodo para iniciar la pagina con el cargado de datos
        ///</sumary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
            listaPlatos = NegocioMenu.ObtenerTodosPlatos();
            this.GVPlato.DataSource = listaPlatos; //inicializa el gridview con los platos
            this.GVPlato.DataBind(); // enlaza los datos de plato
        }

        ///<sumary>
        ///Metodo que se encarga de chequear si recarga todos los platos del sistema
        ///o los platos que se indican el el buscador
        ///</sumary>
        public void RecargarGridView()    
        {                              
            if (this.TBBuscarPlato.Text != " ") // verifica que haya una palabra en el buscador
            {
                listaBusquedaPlatos = new List<Plato>(); // inicia la lista de platos

                foreach (Plato plato in listaPlatos)  //recorre la lista de platos
                {
                    nombrePlatoComparacion = plato.NombrePlato.ToLower(); // transforma en minuscula la palabra clave para comparar
                    if (nombrePlatoComparacion.StartsWith(this.TBBuscarPlato.Text.ToLower())) //compara contra la palabra en misnuscula de la bd
                        listaBusquedaPlatos.Add(plato); // anade a la lista de busqueda si cumple que el inicio del nombre del plato coincide con la palabra clave
                }

                this.GVPlato.DataSource = listaBusquedaPlatos; // inicializa el gridview con los platos de la busqueda
                this.GVPlato.DataBind(); // enlaza los datos de plato

            }
            else // carga normalmente el gridview con todos los platos del sistema
            {
                listaPlatos = new List<Plato>(); // inicia la lista de platos
                listaPlatos = NegocioMenu.ObtenerTodosPlatos(); // carga la lista con los platos del sistema
                this.GVPlato.DataSource = listaPlatos; // inicializa el gridview con los platos de la busqueda
                this.GVPlato.DataBind(); // enlaza los datos de plato

            }
        }


        ///<sumary>
        ///Metodo para controlar la paginacion del gridview
        ///</sumary>
        protected void GVPlato_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GVPlato.PageIndex = e.NewPageIndex; // posiciona al gridview en el siguiente indice de pagina
            RecargarGridView(); // recarga el gridview
        }

        ///<sumary>
        ///Metodo que cada vez que el buscador tenga una palabra recarga el gridview
        ///</sumary>
        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            RecargarGridView(); 
        }

        ///<sumary>
        ///Metodo que se encarga de manejar el pintado del gridview y el raton si se posicionan
        ///sobre un elemento del gridview
        ///</sumary>
        protected void GVPlato_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow) // valida que se coloque el mouse sobre un plato
            {

                e.Row.Attributes.Add("onMouseOver", "this.style.background='#99CCFF';this.style.cursor='pointer'"); // cambia el puntero si se posiciona en un plato                                            
                e.Row.Attributes.Add("onMouseOut", "this.style.background='#ffffff'");  // cambia el color de fondo de la seleccion al pararse sobre el plato
                e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.GVPlato, "Select$" + e.Row.RowIndex);// toma el plato seleccionado
            }
        }

        ///<sumary>
        ///Metodo que recarga el gridview al cambiar un indice
        ///sobre un elemento del gridview
        ///</sumary>
        protected void GVPlato_SelectedIndexChanged(object sender, EventArgs e)
        {
            RecargarGridView(); // se recarga el gridview al cambiar un indice

        }

        ///<sumary>
        ///Metodo que procesa los datos de la fila seleccionada del gridview
        ///</sumary>
        protected void GVPlato_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            RecargarGridView(); // se recarga el gridview

            var colsNoVisible = this.GVPlato.DataKeys[e.NewSelectedIndex].Values; // se obtiene el plato seleccionado

            platoModificar = new Plato(int.Parse(colsNoVisible[0].ToString()), colsNoVisible[1].ToString(), //pasa el plato seleccionado a un objeto
                                        float.Parse(colsNoVisible[2].ToString()), colsNoVisible[3].ToString(),  // plato para ser controlado
                                        colsNoVisible[4].ToString(), bool.Parse(colsNoVisible[5].ToString()),
                                        bool.Parse(colsNoVisible[5].ToString()));

            Response.Redirect("~/Presentacion/API_menu_ModificarPlato.aspx"); // se llama a la pagina de modificar plato con el plato seleccionado
        }

    }
}